Products Shop Support Company |

Case Study: Manage Your Finances™

Every now and then, an innovation in development tools comes along and it changes the way you program and the type of applications that you create. RemObjects' Enterprise SDK is one such product.  

This article describes how RemObjects was used to create a commercial, shrink-wrapped product that provides services to its users remotely and in a secure manner.

The Product

Manage Your Finances™ (MYF) is a personal finances management package, competing in the same market space as Intuit Quicken and Microsoft Money (although very different in application and philosophy). Written with Borland Delphi over a period of two years (which included all aspects of product development, such as the branding, packaging, written documentation, etc), RemObjects enabled MYF to become what is being branded as a WebTop application. That is, it is a standard Win32-based application but it uses the Internet for much of its data access and functionality. This allows a WebTop application to employ a rich user interface (complete with all the advanced interface functionality users have come to expect), yet still allows many of the advantages the Internet offers (such as immediacy of information, data being available from other computers, etc).

Manage Your Finances™ allows you to organize, track and analyze your entire financial situation, including all your assets (such as bank accounts, shares, businesses, personal assets, etc), debts (loans, credit cards, etc), insurances, financial contacts and more in a very easy-to-use and understandable manner.

The MYF software, a retail, shrink-wrapped software package specifically designed for the consumer market, has already made huge inroads into the market, and is already being used by thousands of customers around the world.  

The Development

I should point out at this stage that when I entered into this project, I knew nothing of Web services, SOAP, XML, remoting or any other ‘buzz-word’ technology. My background was purely in classic, Client/Server architectures. All I did know however, was that in order for MYF to be able to offer the kind of services that I wanted, I had to explore other technologies, especially those that involved the Internet.

Therefore, my choice of technology for this project included (perhaps in order of importance to me as the programmer embarking on new ground):

  • Ease of development/short learning curve
  • Speed of development
  • Rich feature set
  • Security of data being transported
  • Works ‘out-of-the-box’, and without undue interruption from bugs or unresolved defects
  • Supportive vendor

You might be surprised to see that the first two requirements really don't have much to do with the technology. Although this product is being distributed world-wide, it has a wide range of integration options with a large number of financial institutions, and is only one part of a large, integrated system that involves the financial planning industry, it was ultimately developed by one sole programmer (and one that taught himself to program in between aerobics classes!). Therefore, you can see that my first concern was just being able to use the tool set, without six months of tearing my hair out trying to comprehend the architecture and concepts behind it.

A great deal of time was spent analyzing technologies that allowed us to construct this ‘WebTop’ application, and an equal amount of time was spent prototyping and testing to see if they met our specific requirements. SOAP was an obvious candidate. As were various Delphi community third-party libraries such as ASTA.

Ultimately, RemObjects was chosen for a number of compelling reasons, not least of which it was by far the most flexible and powerful remoting library I had ever encountered.   Ordinarily, such power and flexibility comes at a price: complexity. RemObjects may be very complex behind the scenes (not that I would know- or need to know), but as the end-user, it was extremely simple.  

How does MYF use RemObjects?

MYF uses RemObjects extensively throughout the program. Some of the key areas that are RemObjects-based include:

  • The Share Price Update
  • The product trial registration and product activation process (including full licence key generation)
  • E-Commerce (the user can buy the software and renew their subscription from within the program using RemObjects and VeriSign)
  • Subscription validation
  • DataFile Upload/Download (a facility whereby the user can send their financial data to their financial planner or accountant for analysis)
  • Countless small ‘helper’ utilities and tools that are used for everything from support (publishing a users’ system information to our support database) to ad-hoc SQL generation and database maintenance
  • Third-party data importing- this interesting feature allows financial institutions to tap into a RemObjects-based server and have their data (such as mutual fund transaction data from a master trust institution) appear as just another data source for importing directly into MYF. For this particular feature, I simply turned off encryption and compression, used XML instead of binary as the data format, and presto- third-party access without having to do custom programming each time a bank wants to provide their data to me.
  • Replacement for DLLs. Due to the incredible ease that the RemObjects Service Build makes in creating 'APIs', I use RemObjects to create all my DLL's rather than the classic Delphi DLL way. The process is exactly the same as creating any other RO server, except I simply tell RemObjects I want a Windows DLL instead of an ISAPI module or Apache module. Then, all the functionality in this DLL is readily accessible in my client applications (including objects) without any of the memory management issues typical of traditional DLL’s. I can even take an existing ISAPI server, and with a couple mouse clicks, make a Windows DLL out of it, and then have both a Web service and a Windows DLL available to my client apps without maintaining two client bases. I cannot stress enough how convenient this feature is! I will never create a traditional Windows DLL again.

RemObjects incorporates built-in data compression and validation, which proved invaluable for this project. MYF is a consumer-based application and a great number of users will still be using dial-up Internet access. RemObjects' compression took care of the majority this issue with the simple flip of a Boolean property. Additionally, being a product that deals with people's money, security and integrity of the data being passed around (either locally or over the Web) is of utmost importance. Again, RemObjects transparently handled this by simply setting a Boolean property along with some encryption keys.  

Quick Case Study

To illustrate just how simple RemObjects has made my programming life, here is a simple example of a recent utility I created to assist with MYF.

MYF uses special keys to determine what type of licence the user has (Trial Edition, Standard Edition or Professional Edition). As we are now in full commercialization mode, I am constantly paying personal visits to financial planning offices, banks and accountants offices to set up their copies of MYF, and show them how to use some of its professional features. I needed a small utility that I could store on my USB key-ring capable of generating custom licence keys on-the-spot. The actual key generation functionality is encapsulated in a DLL file sitting on my Web server. RemObjects made this little utility very fast to develop.

Firstly, I created an empty RemObjects-based ISAPI server. Using the brilliant RO Service Builder, I added one simple function:

GetLicenceKey(AFirstName, ALastName: string; ExpiryDate: TDateTime): string

The implementation for this function was a simple call to my licence key generator DLL.

After uploading my ISAPI DLL to my Web server, I turned to the client, created an empty Delphi project, threw a TROBINMessage and a TROWinInetHTTPChannel onto the main form, set the TargetURL property to my new ISAPI DLL and added the interface unit from the server to the project. Behind a single button sit a few lines of code that looks like this:

procedure TMainForm.btnGetKeyClick(Sender: TObject); var   Obj: IMYFKeygen; begin   Obj := CoMYFKeyGen.Create(ROBINMessage, ROChannel);   memKey.Text := Obj.GetLicenceKey(txtFirstName.Text, txtLastName.Text, txtExpiryDate.Date); end;

Of course, I needed everything to be encrypted I flipped the Encryption property over to tetBlowFish and set my encryption keys. I hear compression is a good thing too, especially for remote data access, so I spent the necessary 10 seconds or so it took to set the UseCompression property to True.

Done! Total time to achieve this entire functionality was approximately 5 minutes (including the upload time to the Web server). The entire project in reality took around 2 hours, but that's simply because I then spent one hour and 50 minutes glossing up my user interface with nice branding images.

Conclusion

Manage Your Finances was originally anticipated to be a monumental project, especially for a single programmer, and indeed it started out that way. However, after introducing RemObjects as a core part of the development toolkit, the time and effort (in design, development and debugging) was reduced dramatically, allowing me to devote a much greater amount of resources to the often neglected aspects of product development: the user interface.

Although it is still early times, we estimate that the return on the very modest investment in purchasing a licence is so far very substantial. RemObjects has allowed Manage Your Finances to publish a compelling personal financial management application that is surpassing all our estimates of success.

© Manage Your Finances™ — reprinted with kind permission.